package br.com.inner.action;

import java.math.BigDecimal;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.util.ServletContextAware;

import br.com.inner.custom.CustomError;
import br.com.inner.custom.CustomException;
import br.com.inner.modelo.Categoria;
import br.com.inner.modelo.Empresa;
import br.com.inner.modelo.UF;
import br.com.inner.ngc.EmpresaNgc;
import br.com.inner.service.CategoriaDaoService;
import br.com.inner.service.CategoriaService;
import br.com.inner.service.EmpresaDaoService;
import br.com.inner.service.EmpresaService;
import br.com.inner.service.UFDaoService;
import br.com.inner.service.UFService;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;

public class EmpresaAction extends ActionSupport implements  Preparable, ServletContextAware, ServletRequestAware{

	private static EmpresaService catEmpresa = new EmpresaDaoService();
	private static CategoriaService catCategoria = new CategoriaDaoService();
	private static UFService catUF = new UFDaoService();
	private static EmpresaNgc empNgc = EmpresaNgc.getInstance();
	
	private HttpServletRequest request;
	private ServletContext s;
	
	private Empresa empresa;
	private List<Empresa> empresas;
	private List<Categoria> categorias;
	private List<UF> ufs;
	
	public List<Categoria> getCategorias() {
		return categorias;
	}

	public void setCategorias(List<Categoria> categorias) {
		this.categorias = categorias;
	}
	
	public List<UF> getUfs() {
		return ufs;
	}

	public void setUfs(List<UF> ufs) {
		this.ufs = ufs;
	}

	public void prepare() throws Exception {
		categorias = catCategoria.getCategoriasAbertas();
		ufs = catUF.getAllUFs(); 
	}
	
	public void setServletContext(ServletContext arg0) {
		// TODO Auto-generated method stub
		s = arg0;
	}
	
	public void setServletRequest(HttpServletRequest httpServletRequest) {
		this.request = httpServletRequest;		
	}
	
	public String doEdit() throws CustomException{
		BigDecimal cdUsuario = new BigDecimal(request.getParameter("cdUsuario"));
		System.out.println("Pesquisa Empresa(Usuario: "+cdUsuario+")");
		empresa = catEmpresa.getEmpresa(cdUsuario);
		return INPUT;
	}
	
	public String doPesquisa(){
		try {
			String nmFantasia = request.getParameter("nomeFantasia");
			String uf = request.getParameter("cdUf");
			String cidade = request.getParameter("cidade");
			empresas = catEmpresa.pesquisaEmpresa("%"+nmFantasia+"%",uf, "%"+cidade+"%");
		} catch (CustomException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return SUCCESS;
	}
	
	public String doUpdate(){
		try {
			empNgc.validaUpdate(empresa);
		} catch (CustomException e) {
			List<CustomError> ce = e.getErrors();
			for (int i = 0; i < ce.size(); i++) {
				String erro = ce.get(i).getKey();
				addActionError(getText(erro));
			}
			return INPUT;
		}
		catEmpresa.update(empresa);
		return INPUT;
	}

	public Empresa getEmpresa() {
		return empresa;
	}

	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}

	public List<Empresa> getEmpresas() {
		return empresas;
	}

	public void setEmpresas(List<Empresa> empresas) {
		this.empresas = empresas;
	}
	
	
}
